// v2_jwt/handlers/user_handlers.go
package handlers

import (
	"encoding/json"
	"fmt"
	"grpc-jwt-yonghurenzheng/v2.1_jwt/config"
	"grpc-jwt-yonghurenzheng/v2.1_jwt/models"
	"net/http"
)

// 定义用于从 context 获取 claims 的 key
type contextKey string
const userClaimsKey = contextKey("userClaims")
// Profile 获取当前登录用户的信息 (需要认证)
func Profile(w http.ResponseWriter, r *http.Request) {
	// 从中间件设置的 context 中安全地获取用户信息
	claims, ok := r.Context().Value("userClaims").(*models.Claims)
	if !ok {
		http.Error(w, "无法从 Token 中获取用户信息", http.StatusInternalServerError)
		return
	}

	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(map[string]interface{}{
		"message":  "获取用户信息成功",
		"user_id":  claims.UserID,
		"username": claims.Username,
	})
}
// 注销用户
// DeleteUser 删除当前登录的用户账号 (需要认证)
func DeleteUser(w http.ResponseWriter, r *http.Request) {
	// 同样，从 context 中获取用户信息，确保用户只能删除自己
	claims, ok := r.Context().Value("userClaims").(*models.Claims)
	if !ok {
		http.Error(w, "无法从 Token 中获取用户信息", http.StatusInternalServerError)
		return
	}

	// 获取用户ID，准备从数据库删除
	userIDToDelete := claims.UserID

	// 执行删除操作
	// 建议在实际项目中开启事务来保证数据一致性
	_, err := config.DB.Exec("DELETE FROM users WHERE id = ?", userIDToDelete)
	if err != nil {
		http.Error(w, fmt.Sprintf("删除用户失败: %v", err), http.StatusInternalServerError)
		return
	}

	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(http.StatusOK)
	json.NewEncoder(w).Encode(map[string]string{"message": "您的账户已成功注销"})
}




